home *** CD-ROM | disk | FTP | other *** search
/ Everything For A Hacker / 19990506-[HACK].iso / SECURE / CRYPT / GOST.ZIP / EXPKEY~.ASM < prev    next >
Assembly Source File  |  1995-12-25  |  2KB  |  71 lines

  1. ;------------------------------------------------------
  2. ; Å«ßΓα«Ñ¡¿Ñ αáßΦ¿αÑ¡¡«ú« ¬½ετá Φ¿Σα«óá¡¿∩ ¿º «ñ¡«¬αáΓ-
  3. ; ¡«ú« ¬½ετá ñ½∩ Φ¿Σαá Γ¿»á âÄæÆ 28147-89.
  4. ; ** æσѼá αáßΦ¿αÑ¡¿∩ ºáñáÑΓß∩ ¼á߬«⌐ αáßΦ¿αÑ¡¿∩.
  5. ; ** îá߬á αáßΦ¿αÑ¡¿∩ ¼«ªÑΓ ¿¼ÑΓ∞ αẼÑα 1..32767 í¿Γ.
  6. ; --------> ñ½∩ 32-í¿Γ«óδσ »α«µÑßß«α«ó 80x86 <---------
  7. ; v3.0, Éáºαáí«Γá½ é¿¡«¬πα«ó Ç.₧., ú.î«ß¬óá, 1995 ú.
  8. ; (c) 1992-1995, æó«í«ñ¡«Ñ ¬«»¿α«óá¡¿Ñ ¿ ¿ß»«½∞º«óá¡¿Ñ.
  9. ;------------------------------------------------------
  10. ; Åáαá¼ÑΓαδ »α¿ ó맮óÑ »ÑαÑñáεΓß∩ ó ßΓφ¬Ñ :
  11. ;   ê¼∩        Æ¿»    æ¼δß½
  12. ;   Key        DWORD  FAR-áñαÑß ¬½ετá
  13. ;   Target     DWORD  FAR-áñαÑß «í½áßΓ¿ ¡áº¡áτÑ¡¿∩
  14. ;   KeyLength  WORD   αẼÑα ¬½ετá ó 4-íá⌐Γ«óδσ í½«¬áσ
  15. ;   KeyRepeat  WORD   τ¿ß½« »«óΓ«αÑ¡¿⌐ ¬½ετá
  16. ;   RepeatMask WORD:? ¼áßß¿ó í¿Γ«ó ¡á»αáó½Ñ¡¿⌐
  17. ; é«ºóαáΘáѼ«Ñ º¡áτÑ¡¿Ñ:  τ¿ß½« óδ»«½Ñ¡¡δ󠬫»¿⌐ ¬½ετá
  18. ; - αáó¡« »áαá¼ÑΓαπ KeyRepeat, Ñß½¿ KeyRepeat >= 0;
  19. ; - αáó¡« 0, Ñß½¿ KeyRepeat < 0;
  20. ;------------------------------------------------------
  21. ; çáú«½«ó«¬ »α«µÑñπαδ
  22. ;
  23.     .model  small,C
  24.     .code   $gost
  25.     .386
  26. ExpandKey proc  C
  27.     ARG    Key:        DWORD,\
  28.         Target:         DWORD,\
  29.         KeyLength:      WORD,\
  30.         KeyRepeat:      WORD,\
  31.         RepeatMask:    WORD
  32.     USES    DS,SI,DI
  33.  
  34.         public  ExpandKey
  35. ;
  36. ; ìáßΓα«⌐¬á αÑú¿ßΓα«ó
  37. ;
  38.     lds     SI,Key        ; DS:SI=áñαÑß ¬½ετá
  39.     les     DI,Target    ; ES:DI=áñαÑß ¡áº¡áτÑ¡¿∩
  40.         mov     AX,KeyLength    ; AX <- ¬«½.φ½-Γ«ó ¬½.
  41.         lea     BX,[ESI+4*EAX-4]; BX <- áñαÑß ¬«¡µá ¬½ετá
  42.     sub     AX,AX        ; AX=0
  43.     cld
  44. ;
  45. ; Åα«óÑα¬á πß½«ó¿∩ ºáóÑαΦÑ¡¿∩ µ¿¬½á
  46. ;
  47. begin:    cmp    AX,KeyRepeat    ; ¡πª¡«Ñ τ¿ß½« ßñѽᡫ ?
  48.     jge    exit        ; Ñß½¿ ñá, óδσ«ñ
  49. ;
  50. ; Å«óΓ«αÑ¡¿Ñ φ½Ñ¼Ñ¡Γ«ó ¬½ετá ó »α∩¼«¼ »«α∩ñ¬Ñ
  51. ;
  52.           mov    CX,KeyLength    ; CX=ñ½¿¡á ¬½ετá
  53.     bt     RepeatMask,AX    ; CF=«τÑαÑñ¡«⌐ í¿Γ ¼á߬¿
  54.     jc    Reverse        ; CF=1 -> αÑóÑαß
  55.     mov    SI,Word PTR Key    ; SI=ß¼ÑΘÑ¡¿Ñ ¬½ετá
  56.     rep movsd            ; ¬«»¿απѼ ¬½ετ
  57.     jmp short Incr        ; ¡á ßτÑΓ »«óΓ«α. ¬½ετá
  58. ;
  59. ; Å«óΓ«αÑ¡¿Ñ φ½Ñ¼Ñ¡Γ«ó ¬½ετá ó «íαáΓ¡«¼ »«α∩ñ¬Ñ
  60. ;
  61. Reverse:mov    SI,BX        ; SI=áñαÑß ¬«¡µá ¬½ετá
  62. rev:    movsd            ;        ß½«óá ¬½ετá
  63.         sub      SI,8        ; ¬ »αÑñΦ. φ½Ñ¼Ñ¡Γπ
  64.         loop    rev        ; «αúá¡¿ºáµ¿∩ µ¿¬½á
  65. Incr:    inc     AX              ; ßτÑΓτ¿¬ »«óΓ«α«ó ¬½ετá
  66.     jmp    begin
  67. ;
  68. exit:    ret
  69. ExpandKey endp
  70.     end
  71.